// PROGRAMA.: INFSEGP3
// ANALISTA.: SOLON MIRANDA
// PROGRAMADOR: BRUNO LOPES COSTA
// DATA.: 25/03/98
// OBJETIVO.: LISTAR NOMES INVALIDOS DE INDIVIDUOS CRIMINAIS
// DESCRICAO: EMITE UM RELATORIO DE INDIVIDUOS QUE POSSUIREM ALGUMA
// INCONSISTENCIA NA FORMACAO DE SEU NOME.
// ESTE PROGRAMA E EXECUTADO A PARTIR DO JOB 'INFSEGP3' E
// UTILIZA UMA CHAMADA AO SUBPROGRAMA 'VALIDNOM'

package br.com.vti.sisp_sicrim.antigo.controller.programa;

import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.download.InputStreamDownload;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Infsegp3Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Relatorio;
import br.com.vti.sisp_sicrim.antigo.model.SicCadastro;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;

/**
 * Classe : Infsegp3 OBJETIVO.: LISTAR NOMES INVALIDOS DE INDIVIDUOS CRIMINAIS DESCRICAO: EMITE UM RELATORIO DE INDIVIDUOS QUE POSSUIREM ALGUMA INCONSISTENCIA NA FORMACAO DE SEU NOME. ESTE PROGRAMA E
 * EXECUTADO A PARTIR DO JOB 'INFSEGP3' E UTILIZA UMA CHAMADA AO SUBPROGRAMA 'VALIDNOM' *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/infsegp3")
public class Infsegp3 {
	// Views utilizadas
	SicCadastro criminalView = new SicCadastro();
	// Telas/relatorios utilizados
	Infsegp3Report report;
	// Includes utilizados
	// Areas globais / session // Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();
	
	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	private String jNome;
	private int jCount = 0;
	Relatorio relatorio;
	Infsegp3 infsegp3Anterior;
	private String faseproc = "0";
	
	private Relatorio preMapas() {
		primeiraVez = true;
		relatorio = new Relatorio(primeiraVez, sessao);
		relatorio.setTitulo("RELATORIO DE INDIVIDUOS COM INCONSISTENCIA NO NOME");
		relatorio.setNavegar("../infsegp3/executar");
		result.include("relatorio", relatorio);
		sessao.setAtributo("INFSEGP3", this);
		relatorio.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		faseproc = "0";
	
		// Par�grafo: rp0()
		return relatorio;
	}

	public Infsegp3(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Get
	public InputStreamDownload executar(Relatorio relatorio) {
		try {
			return main(relatorio);
		} catch (Exception e) {
			throw new ExceptionProgram(e, sessao, this.getClass().getSimpleName());
		}
	}

	private InputStreamDownload main(Relatorio prelatorio) throws Exception {
		
		if (prelatorio == null ) {
			
			preMapas();

			return null;
		} else {
			restaurarEstados(prelatorio);
		}
		
		if(faseproc == null ){
			
			preMapas();
			
			return null;
		}
		// //DEFINE PRINTER(1)

		// OUTPUT 'P69E'

		// RELATORIO 1 PS=63 LS=132
		report = new Infsegp3Report();
		report.setPageSize(63);
		report.setLineSize(132);
		// RELATORIO
		report.setJmsgerr(1, "01 - Nome em Branco");
		report.setJmsgerr(2, "02 - Carac. Invalido na Primeira Posicao");
		report.setJmsgerr(3, "03 - Carac. Invalido no Nome");
		report.setJmsgerr(4, "04 - Utilizacao Invalida Hifen ou Apostrofo");
		report.setJmsgerr(5, "05 - Utilizacao Invalida Ponto");
		report.setJmsgerr(6, "06 - Mais de Hum espaco entre Nomes");
		report.setJmsgerr(7, "07 - Nome sem Sobrenome");
		report.setJmsgerr(8, "08 - Ponto no Final do Nome");
		while (criminalView.leituraTipoRegTipoReg("IN", "AL")) {
			
			funcoes.validnom(criminalView.getNomeCompleto());
			if (funcoes.err != 0) {
				
				report.setRegistroEstadualGeral(criminalView.getRegEstadualGeral());
				report.setNomeCompleto(criminalView.getNomeCompleto());
				report.setJpos(funcoes.posicao);
				
				report.gravaRelatorio(2);
				jCount++;
				report.setJcount(jCount);
			}

		}
		criminalView.fecha();
		report.gravaRelatorio(3);
		return report.imprimir();
	}
	
	private void restaurarEstados(Relatorio prelatorio) {
		this.infsegp3Anterior = (Infsegp3) sessao.getAtributo("INFSEGP3");
		if (prelatorio != null) {
			relatorio = prelatorio;
		} else {
			relatorio = this.infsegp3Anterior.relatorio;
		}
		
		faseproc = infsegp3Anterior.faseproc;


	}
	
}
